package com.ba05;


import jdk.jfr.Frequency;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/*
* @Component 创建对象，等同于《bean》的功能
* 属性：value就是对象的名称，即bean的id
*       value是唯一的
* 位置:在类的上面
* @Component(value = "mystudnet")等同于
* 《bean id="mystudent" class=“com.ba01.Student"》
*
* Component默认类名为，类名首字母小写
*
* spring中和component功能一致，创建对象的注解还有
* 1.@Repository(用在持久层类上面)：放dao的实现类上面，
*                   表示创建dao对象，dao对象是能访问数据库的
* 2.@Service(用在业务层类上面)：放在service的实现类上面，
*                   创建service对象，service对象是做业务处理，可以有事务等功能的。
* 3.@Controller（用在控制器层上面）：放在控制器（处理器）类上面，创建控制器对象，控制器对象，
*                   能够接受用户提交的参数，显示亲求的处理结果。
*  以上三个注解的使用语法和component一样，都能创建对象，但是这三个注解还有额外的功能。
*@Repository、@Service、@Controller是给项目的对象分层。
* 4.@component用法，不是以上三层就使用component
*
*
*
* */
@Component("mystudent1")

public class Student {
    /*
    *
    * @Value:简单类型的属性赋值
    * 位置:1、在属性定义之上，无需set方法
    *     2、在set方法上面
    * */

    @Value("sarah")
    private String name;
    @Value("25")
    private Integer age;
/*
<h4>
经常改变使用配置文件，
不经常改变使用注解
可读性好


</h4>
* 引用类型
* @Autowired:sprinf框架提供的注解，实现引用类型的赋值。
* spring中通过注解给用用类型赋值，使用自动注入原理，支持byName,byType
*  @Autowired：默认使用的是byType自动注入
*
* 属性：required，是一个boolean类型的，默认true
*   required=true：表示是引用类型赋值是被，程序报错，并终止执行
*   required=false：表示是引用类型赋值是失败时，程序正常执行，引用类型是null
* 如果要使用byName方法，需要做的是；
*   1.在属性上面加入@Autowired
*   2.在属性上面加入@Qualifier（value="bean的id"）：表示使用指定名称使bean完成赋值。
*
*
*
* 位置：
*   1.在属性定义上面，无需set方法
*   2.在set方法上面
*
*
* @Resource:来自jdk中的注解，spring框架提供了对这个注解的功能支持，可以使用它给引用类型赋值
* 使用的也是自动注入的原理，支持byName byType 默认byname
* 先使用byName,若失败，则在使用byType
*   若只使用byName方式，需要怎加一个属性name



    ${}
* */
    //使用ByType
    //默认byName
    @Resource(name="mySchool")
    private School school;

  /*  public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }



*/

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}
